package com.team.six.bluecatshop.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.team.six.bluecatshop.domain.*;
import com.team.six.bluecatshop.mapper.ProductMapper;
import com.team.six.bluecatshop.mapper.ProductTypeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Service
public class ProductServiceImpl implements ProductService{
    @Autowired
    private ProductMapper productMapper;
    @Autowired
    private ProductTypeMapper productTypeMapper;
    @Autowired
    private SkuService skuService;

    BigDecimal bigDecimal = null;
    BigDecimal bigDecimal2 = null;

    @Override
    @Transactional
    public void add(Product product) {
        productMapper.insert(product);
    }

    @Override
    @Transactional
    public void remove(String id) {
        List<Sku> skus = skuService.findSkuByProductId(id);
        for (Sku sku : skus){
            skuService.remove(sku.getSkuId());
        }
        productMapper.deleteByPrimaryKey(id);
    }

    @Override
    public Product findById(String id) {
        Product product=productMapper.selectByPrimaryKey(id);
        return product;
    }

    @Override
    public List<Product> findAll() {
        List<Product> productList = productMapper.findAll();
        return productList;
    }

    @Override
    public Product findProductByName(String name) {
        Product product = productMapper.findByName(name);
        return product;
    }


    @Override
    @Transactional
    public void updateByPrimaryKey(Product product) {
        productMapper.updateByPrimaryKeySelective(product);
    }

    /**
     * 管理员端模糊查询商品
     */
    @Override
    public SeachProductResponse findProductAll(Integer pageNum, Integer pageSize, String keyword) {
        PageHelper.startPage(pageNum,pageSize);
        ProductExample example = new ProductExample();
        example.createCriteria().andProductNameLike("%"+ keyword + "%");
        List<Product> products = productMapper.selectByExample(example);
        for (Product product : products){
            if (product.getPtypeId().equals("")){
                continue;
            }else {
                ProductType productType = productTypeMapper.selectByPrimaryKey(product.getPtypeId());
                if(productType != null){
                    System.out.println(productType.getPtypeName());
                    product.setProductTypeName(productType.getPtypeName());
                }else {
                    continue;
                }
            }
        }
        return new SeachProductResponse(((Page)products).getTotal(),products);
    }

    /**
     * 模糊查询
     * */
    @Override
    public List<Product> findByKeyWord(String keyword) {
        ProductExample example = new ProductExample();
        example.createCriteria().andProductNameLike("%"+keyword+"%");
        List<Product> products = find(example);
        return find(example);
    }




    /**
     * 公共方法
     */
    List<Product> find(ProductExample example){
        List<Product> products = productMapper.selectByExample(example);

        for(Product p:products){
            p=setImgToProduct(p);
        }

        return products;
    }

    /**
     * 加载商品sku并将第一张图片作为默认图片
     * */
    @Override
    public Product setImgToProduct(Product product){
        List<Sku> skus=skuService.findSkuByProductId(product.getProductId());
        product.setSkus(skus);//将sku保存在product中
        if (skus.size() > 0 && skus.get(0)!=null && !skus.get(0).getImgSrc().equals("")){
            product.setImgSrc(skus.get(0).getImgSrc());//从sku中第一个图片作为商品默认展示的图片
        }
        return  product;
    }

    @Override
    public Product setSkuToProduct(Product product) {
        List<Sku> skus = skuService.findSkuByProductId(product.getProductId());//加载商品的规格
        product.setSkus(skus);//将sku放入商品中暂存
        return product;
    }


    ///**
    // * 根据条件查询出所有包邮的东西
    // */
    //List<Product> findYoufei(ProductExample example){
    //    List<Product> products = productMapper.selectByExample(example);
    //    List<Product> productList = new ArrayList<>();
    //    for(Product p:products){
    //        List<Sku> skus=(List<Sku>) skuService.findSkuByProductId(p.getProductId());
    //        p.setSkus(skus);//将sku保存在product中
    //        if (skus.size() > 0 && skus.get(0)!=null && !skus.get(0).getImgSrc().equals("")){
    //            p.setImgSrc(skus.get(0).getImgSrc());//从sku中第一个图片作为商品默认展示的图片
    //        }
    //        if (p.getProductYoufei().compareTo(BigDecimal.ZERO) == 0){
    //            productList.add(p);
    //        }else {
    //
    //        }
    //    }
    //    return productList;
    //}
    //
    ///**
    // * 根据条件查询出所有有库存的东西
    // */
    //List<Product> findkucun(ProductExample example){
    //    List<Product> products = productMapper.selectByExample(example);
    //    List<Product> productList = new ArrayList<>();
    //    for(Product p:products){
    //        List<Sku> skus=(List<Sku>) skuService.findSkuByProductId(p.getProductId());
    //        p.setSkus(skus);//将sku保存在product中
    //        if (skus.size() > 0 && skus.get(0)!=null && !skus.get(0).getImgSrc().equals("")){
    //            p.setImgSrc(skus.get(0).getImgSrc());//从sku中第一个图片作为商品默认展示的图片
    //        }
    //        if (p.getProductCount() == 0){
    //            productList.add(p);
    //        }else {
    //
    //        }
    //    }
    //    return productList;
    //}

    /**
     * 根据库存、邮费联合查询
     */
    List<Product> findYoufeikucun(ProductExample example,String Youfei,String kucun){
        List<Product> products = productMapper.selectByExample(example);
        List<Product> productList = new ArrayList<>();
        for(Product p:products){
            p=setImgToProduct(p);
            if(!Youfei.equals("") && kucun.equals("") ){
                if (p.getProductYoufei().compareTo(BigDecimal.ZERO) == 0){
                    productList.add(p);
                }else {
                }
            }else if (Youfei.equals("")  && !kucun.equals("") ){
                if (p.getProductCount() != 0){
                    productList.add(p);
                }else {
                }
            }else if (!Youfei.equals("")  && !kucun.equals("") ){
                if (p.getProductCount() != 0 && p.getProductYoufei().compareTo(BigDecimal.ZERO) == 0){
                    productList.add(p);
                }else {
                }
            }else {
                productList.add(p);
            }
        }
        return productList;
    }


    /**
     * 联合查询
     */
    @Override
    public List<Product> findSearchByExample(String keyword, String priceFont, String priceFoot,String sort, String Youfei, String kucun,int count) {
        ProductExample example = new ProductExample();
        if(!priceFont.equals("")){
            bigDecimal = new BigDecimal(priceFont.trim());
        }

        if (!priceFoot.equals("")){
            bigDecimal2 = new BigDecimal(priceFoot.trim());
        }

        if(priceFont.equals("") && !priceFoot.equals("")){
            example.createCriteria().andProductNameLike("%" + keyword + "%").andProductPriceLessThan(bigDecimal2);
        }
        else if(!priceFont.equals("") && priceFoot.equals("")){
            example.createCriteria().andProductNameLike("%" + keyword + "%").andProductPriceGreaterThan(bigDecimal);
        }
        else if(!priceFont.equals("") && !priceFoot.equals("")){
            example.createCriteria().andProductNameLike("%" + keyword + "%").andProductPriceBetween(bigDecimal,bigDecimal2);
        }else {
            example.createCriteria().andProductNameLike("%" + keyword + "%");
        }
        if(sort.equals("0")){

        }else if (sort.equals("1")){
            if(count % 2 ==0){
                example.setOrderByClause("product_price asc");
            }else {
                example.setOrderByClause("product_price desc");
            }
        }else if(sort.equals("2")){
            if(count % 2 ==0){
                example.setOrderByClause("product_comme asc");
            }else {
                example.setOrderByClause("product_comme desc");
            }
        }else {

        }
        List<Product> youfeikucun = findYoufeikucun(example, Youfei, kucun);
        return youfeikucun;
    }

}
